﻿using Little.Soldier.SWIFT;
using Little.Soldier.SWIFT.Definition;
using System.ComponentModel;

namespace Little.Soldier.SWIFT.Messages.Category7
{
  public class MT754 : SwiftMessage
  {
    private static SwiftMessageDefinition MessageDefinition;
    private static SwiftTagDefinition U0002;
    private static SwiftTagSubItemDefinition U0003;
    private static SwiftTagDefinition U0004;
    private static SwiftTagSubItemDefinition U0005;
    private static SwiftTagChoiceDefinition U0006;
    private static SwiftTagDefinition U0007;
    private static SwiftTagSubItemDefinition U0008;
    private static SwiftTagSubItemDefinition U000E;
    private static SwiftTagSubItemDefinition U000F;
    private static SwiftTagDefinition U0010;
    private static SwiftTagSubItemDefinition U0011;
    private static SwiftTagSubItemDefinition U0012;
    private static SwiftTagDefinition U0013;
    private static SwiftTagSubItemDefinition U0014;
    private static SwiftTagSubItemDefinition U0015;
    private static SwiftTagDefinition U0016;
    private static SwiftTagDefinition U0017;
    private static SwiftTagChoiceDefinition U0018;
    private static SwiftTagDefinition U0019;
    private static SwiftTagSubItemDefinition U001A;
    private static SwiftTagSubItemDefinition U001B;
    private static SwiftTagSubItemDefinition U001C;
    private static SwiftTagDefinition U001D;
    private static SwiftTagSubItemDefinition U001E;
    private static SwiftTagSubItemDefinition U001F;
    private static SwiftTagChoiceDefinition U007F;
    private static SwiftTagDefinition U0080;
    private static SwiftTagSubItemDefinition U0081;
    private static SwiftTagSubItemDefinition U0082;
    private static SwiftTagDefinition U0083;
    private static SwiftTagSubItemDefinition U0084;
    private static SwiftTagSubItemDefinition U0086;
    private static SwiftTagSubItemDefinition U0087;
    private static SwiftTagDefinition U0088;
    private static SwiftTagSubItemDefinition U0089;
    private static SwiftTagSubItemDefinition U008A;
    private static SwiftTagChoiceDefinition U008B;
    private static SwiftTagDefinition U008C;
    private static SwiftTagSubItemDefinition U008D;
    private static SwiftTagSubItemDefinition U008E;
    private static SwiftTagDefinition U008F;
    private static SwiftTagSubItemDefinition U0090;
    private static SwiftTagSubItemDefinition U0091;
    private static SwiftTagSubItemDefinition U0092;
    private static SwiftTagDefinition U0093;
    private static SwiftTagSubItemDefinition U0094;
    private static SwiftTagSubItemDefinition U0095;
    private static SwiftTagChoiceDefinition U0096;
    private static SwiftTagDefinition U0097;
    private static SwiftTagSubItemDefinition U0098;
    private static SwiftTagSubItemDefinition U0099;
    private static SwiftTagDefinition U009A;
    private static SwiftTagSubItemDefinition U009B;
    private static SwiftTagSubItemDefinition U009C;
    private static SwiftTagDefinition U009D;
    private static SwiftTagDefinition U009E;

    [Description("Sender’s Reference")]
    public Tag20 SendersReference_20
    {
      get
      {
        return new Tag20((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U0002);
      }
    }

    [Description("Sender’s Reference")]
    public Tag20 Tag20_SendersReference
    {
      get
      {
        return this.SendersReference_20;
      }
    }

    [Description("Related Reference")]
    public Tag21 Related_x0020_Reference_21
    {
      get
      {
        return new Tag21((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U0004);
      }
    }

    [Description("Related Reference")]
    public Tag21 Tag21_Related_x0020_Reference
    {
      get
      {
        return this.Related_x0020_Reference_21;
      }
    }

    [Description("Principal Amount Paid")]
    public Tag32A PrincipalAmountPaid_32A
    {
      get
      {
        return new Tag32A((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U0007);
      }
    }

    [Description("Principal Amount Paid")]
    public Tag32A Tag32A_PrincipalAmountPaid
    {
      get
      {
        return this.PrincipalAmountPaid_32A;
      }
    }

    [Description("Principal Amount Paid")]
    public Tag32B PrincipalAmountPaid_32B
    {
      get
      {
        return new Tag32B((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U0010);
      }
    }

    [Description("Principal Amount Paid")]
    public Tag32B Tag32B_PrincipalAmountPaid
    {
      get
      {
        return this.PrincipalAmountPaid_32B;
      }
    }

    [Description("Additional Amounts")]
    public Tag33B AdditionalAmounts_33B
    {
      get
      {
        return new Tag33B((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U0013);
      }
    }

    [Description("Additional Amounts")]
    public Tag33B Tag33B_AdditionalAmounts
    {
      get
      {
        return this.AdditionalAmounts_33B;
      }
    }

    [Description("Charges Deducted")]
    public Tag71B ChargesDeducted_71B
    {
      get
      {
        return new Tag71B((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U0016);
      }
    }

    [Description("Charges Deducted")]
    public Tag71B Tag71B_ChargesDeducted
    {
      get
      {
        return this.ChargesDeducted_71B;
      }
    }

    [Description("Charges Added")]
    public Tag73 ChargesAdded_73
    {
      get
      {
        return new Tag73((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U0017);
      }
    }

    [Description("Charges Added")]
    public Tag73 Tag73_ChargesAdded
    {
      get
      {
        return this.ChargesAdded_73;
      }
    }

    [Description("Total Amount Claimed")]
    public Tag34A TotalAmountClaimed_34A
    {
      get
      {
        return new Tag34A((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U0019);
      }
    }

    [Description("Total Amount Claimed")]
    public Tag34A Tag34A_TotalAmountClaimed
    {
      get
      {
        return this.TotalAmountClaimed_34A;
      }
    }

    [Description("Total Amount Claimed")]
    public Tag34B TotalAmountClaimed_34B
    {
      get
      {
        return new Tag34B((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U001D);
      }
    }

    [Description("Total Amount Claimed")]
    public Tag34B Tag34B_TotalAmountClaimed
    {
      get
      {
        return this.TotalAmountClaimed_34B;
      }
    }

    [Description("Reimbursing Bank")]
    public Tag53A ReimbursingBank_53A
    {
      get
      {
        return new Tag53A((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U0080);
      }
    }

    [Description("Reimbursing Bank")]
    public Tag53A Tag53A_ReimbursingBank
    {
      get
      {
        return this.ReimbursingBank_53A;
      }
    }

    [Description("Reimbursing Bank")]
    public MT754.Tag53B ReimbursingBank_53B
    {
      get
      {
        return new MT754.Tag53B((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U0083);
      }
    }

    [Description("Reimbursing Bank")]
    public MT754.Tag53B Tag53B_ReimbursingBank
    {
      get
      {
        return this.ReimbursingBank_53B;
      }
    }

    [Description("Reimbursing Bank")]
    public Tag53D ReimbursingBank_53D
    {
      get
      {
        return new Tag53D((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U0088);
      }
    }

    [Description("Reimbursing Bank")]
    public Tag53D Tag53D_ReimbursingBank
    {
      get
      {
        return this.ReimbursingBank_53D;
      }
    }

    [Description("Account With Bank")]
    public Tag57A AccountWithBank_57A
    {
      get
      {
        return new Tag57A((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U008C);
      }
    }

    [Description("Account With Bank")]
    public Tag57A Tag57A_AccountWithBank
    {
      get
      {
        return this.AccountWithBank_57A;
      }
    }

    [Description("Account With Bank")]
    public MT754.Tag57B AccountWithBank_57B
    {
      get
      {
        return new MT754.Tag57B((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U008F);
      }
    }

    [Description("Account With Bank")]
    public MT754.Tag57B Tag57B_AccountWithBank
    {
      get
      {
        return this.AccountWithBank_57B;
      }
    }

    [Description("Account With Bank")]
    public Tag57D AccountWithBank_57D
    {
      get
      {
        return new Tag57D((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U0093);
      }
    }

    [Description("Account With Bank")]
    public Tag57D Tag57D_AccountWithBank
    {
      get
      {
        return this.AccountWithBank_57D;
      }
    }

    [Description("Beneficiary Bank")]
    public Tag58A BeneficiaryBank_58A
    {
      get
      {
        return new Tag58A((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U0097);
      }
    }

    [Description("Beneficiary Bank")]
    public Tag58A Tag58A_BeneficiaryBank
    {
      get
      {
        return this.BeneficiaryBank_58A;
      }
    }

    [Description("Beneficiary Bank")]
    public Tag58D BeneficiaryBank_58D
    {
      get
      {
        return new Tag58D((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U009A);
      }
    }

    [Description("Beneficiary Bank")]
    public Tag58D Tag58D_BeneficiaryBank
    {
      get
      {
        return this.BeneficiaryBank_58D;
      }
    }

    [Description("Sender To Receiver Information")]
    public Tag72 SenderToReceiverInformation_72
    {
      get
      {
        return new Tag72((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U009D);
      }
    }

    [Description("Sender To Receiver Information")]
    public Tag72 Tag72_SenderToReceiverInformation
    {
      get
      {
        return this.SenderToReceiverInformation_72;
      }
    }

    [Description("Narrative")]
    public Tag77A Narrative_77A
    {
      get
      {
        return new Tag77A((SwiftElement) this, 0, (SwiftDefinitionElement) MT754.U009E);
      }
    }

    [Description("Narrative")]
    public Tag77A Tag77A_Narrative
    {
      get
      {
        return this.Narrative_77A;
      }
    }

    public MT754()
      : base(true)
    {
    }

    public MT754(SwiftMessage message)
      : base(message)
    {
    }

    internal override SwiftMessageDefinition MsgDefinition()
    {
      return MT754.MessageDefinition;
    }

    protected override void InitSwiftMessageDefinition()
    {
      MT754.MessageDefinition = new SwiftMessageDefinition("MT754", "Advice of Payment/Acceptance/Negotiation");
      MT754.U0002 = new SwiftTagDefinition("SendersReference_20", "Sender’s Reference");
      MT754.U0002.TagName = ":20:";
      MT754.U0003 = new SwiftTagSubItemDefinition("Reference", "Reference");
      MT754.U0002.Elements.Add((SwiftDefinitionElement) MT754.U0003);
      MT754.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT754.U0002);
      MT754.U0004 = new SwiftTagDefinition("Related_x0020_Reference_21", "Related Reference");
      MT754.U0004.TagName = ":21:";
      MT754.U0005 = new SwiftTagSubItemDefinition("Reference", "Reference");
      MT754.U0004.Elements.Add((SwiftDefinitionElement) MT754.U0005);
      MT754.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT754.U0004);
      MT754.U0006 = new SwiftTagChoiceDefinition("Choice", "");
      MT754.U0006.Multiple = true;
      MT754.U0007 = new SwiftTagDefinition("PrincipalAmountPaid_32A", "Principal Amount Paid");
      MT754.U0007.TagName = ":32A:";
      MT754.U0008 = new SwiftTagSubItemDefinition("Date", "Date");
      MT754.U0007.Elements.Add((SwiftDefinitionElement) MT754.U0008);
      MT754.U000E = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT754.U0007.Elements.Add((SwiftDefinitionElement) MT754.U000E);
      MT754.U000F = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT754.U0007.Elements.Add((SwiftDefinitionElement) MT754.U000F);
      MT754.U0006.Elements.Add((SwiftDefinitionElement) MT754.U0007);
      MT754.U0010 = new SwiftTagDefinition("PrincipalAmountPaid_32B", "Principal Amount Paid");
      MT754.U0010.TagName = ":32B:";
      MT754.U0011 = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT754.U0010.Elements.Add((SwiftDefinitionElement) MT754.U0011);
      MT754.U0012 = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT754.U0010.Elements.Add((SwiftDefinitionElement) MT754.U0012);
      MT754.U0006.Elements.Add((SwiftDefinitionElement) MT754.U0010);
      MT754.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT754.U0006);
      MT754.U0013 = new SwiftTagDefinition("AdditionalAmounts_33B", "Additional Amounts");
      MT754.U0013.TagName = ":33B:";
      MT754.U0013.Mandatory = false;
      MT754.U0014 = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT754.U0013.Elements.Add((SwiftDefinitionElement) MT754.U0014);
      MT754.U0015 = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT754.U0013.Elements.Add((SwiftDefinitionElement) MT754.U0015);
      MT754.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT754.U0013);
      MT754.U0016 = new SwiftTagDefinition("ChargesDeducted_71B", "Charges Deducted");
      MT754.U0016.TagName = ":71B:";
      MT754.U0016.Mandatory = false;
      MT754.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT754.U0016);
      MT754.U0017 = new SwiftTagDefinition("ChargesAdded_73", "Charges Added");
      MT754.U0017.TagName = ":73:";
      MT754.U0017.Mandatory = false;
      MT754.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT754.U0017);
      MT754.U0018 = new SwiftTagChoiceDefinition("Choice", "");
      MT754.U0018.Mandatory = false;
      MT754.U0018.Multiple = true;
      MT754.U0019 = new SwiftTagDefinition("TotalAmountClaimed_34A", "Total Amount Claimed");
      MT754.U0019.TagName = ":34A:";
      MT754.U001A = new SwiftTagSubItemDefinition("Date", "Date");
      MT754.U0019.Elements.Add((SwiftDefinitionElement) MT754.U001A);
      MT754.U001B = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT754.U0019.Elements.Add((SwiftDefinitionElement) MT754.U001B);
      MT754.U001C = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT754.U0019.Elements.Add((SwiftDefinitionElement) MT754.U001C);
      MT754.U0018.Elements.Add((SwiftDefinitionElement) MT754.U0019);
      MT754.U001D = new SwiftTagDefinition("TotalAmountClaimed_34B", "Total Amount Claimed");
      MT754.U001D.TagName = ":34B:";
      MT754.U001E = new SwiftTagSubItemDefinition("Currency", "Currency");
      MT754.U001D.Elements.Add((SwiftDefinitionElement) MT754.U001E);
      MT754.U001F = new SwiftTagSubItemDefinition("Amount", "Amount");
      MT754.U001D.Elements.Add((SwiftDefinitionElement) MT754.U001F);
      MT754.U0018.Elements.Add((SwiftDefinitionElement) MT754.U001D);
      MT754.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT754.U0018);
      MT754.U007F = new SwiftTagChoiceDefinition("Choice", "");
      MT754.U007F.Mandatory = false;
      MT754.U007F.Multiple = true;
      MT754.U0080 = new SwiftTagDefinition("ReimbursingBank_53A", "Reimbursing Bank");
      MT754.U0080.TagName = ":53A:";
      MT754.U0081 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT754.U0081.Mandatory = false;
      MT754.U0080.Elements.Add((SwiftDefinitionElement) MT754.U0081);
      MT754.U0082 = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT754.U0080.Elements.Add((SwiftDefinitionElement) MT754.U0082);
      MT754.U007F.Elements.Add((SwiftDefinitionElement) MT754.U0080);
      MT754.U0083 = new SwiftTagDefinition("ReimbursingBank_53B", "Reimbursing Bank");
      MT754.U0083.TagName = ":53B:";
      MT754.U0084 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT754.U0084.Mandatory = false;
      MT754.U0083.Elements.Add((SwiftDefinitionElement) MT754.U0084);
      MT754.U0086 = new SwiftTagSubItemDefinition("Location", "Location");
      MT754.U0086.Mandatory = false;
      MT754.U0087 = new SwiftTagSubItemDefinition("Location_1", "");
      MT754.U0086.Elements.Add((SwiftDefinitionElement) MT754.U0087);
      MT754.U0083.Elements.Add((SwiftDefinitionElement) MT754.U0086);
      MT754.U007F.Elements.Add((SwiftDefinitionElement) MT754.U0083);
      MT754.U0088 = new SwiftTagDefinition("ReimbursingBank_53D", "Reimbursing Bank");
      MT754.U0088.TagName = ":53D:";
      MT754.U0089 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT754.U0089.Mandatory = false;
      MT754.U0088.Elements.Add((SwiftDefinitionElement) MT754.U0089);
      MT754.U008A = new SwiftTagSubItemDefinition("NameAndAddress", "Name And Address");
      MT754.U0088.Elements.Add((SwiftDefinitionElement) MT754.U008A);
      MT754.U007F.Elements.Add((SwiftDefinitionElement) MT754.U0088);
      MT754.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT754.U007F);
      MT754.U008B = new SwiftTagChoiceDefinition("Choice", "");
      MT754.U008B.Mandatory = false;
      MT754.U008B.Multiple = true;
      MT754.U008C = new SwiftTagDefinition("AccountWithBank_57A", "Account With Bank");
      MT754.U008C.TagName = ":57A:";
      MT754.U008D = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT754.U008D.Mandatory = false;
      MT754.U008C.Elements.Add((SwiftDefinitionElement) MT754.U008D);
      MT754.U008E = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT754.U008C.Elements.Add((SwiftDefinitionElement) MT754.U008E);
      MT754.U008B.Elements.Add((SwiftDefinitionElement) MT754.U008C);
      MT754.U008F = new SwiftTagDefinition("AccountWithBank_57B", "Account With Bank");
      MT754.U008F.TagName = ":57B:";
      MT754.U0090 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT754.U0090.Mandatory = false;
      MT754.U008F.Elements.Add((SwiftDefinitionElement) MT754.U0090);
      MT754.U0091 = new SwiftTagSubItemDefinition("Location", "Location");
      MT754.U0091.Mandatory = false;
      MT754.U0092 = new SwiftTagSubItemDefinition("Location_1", "");
      MT754.U0091.Elements.Add((SwiftDefinitionElement) MT754.U0092);
      MT754.U008F.Elements.Add((SwiftDefinitionElement) MT754.U0091);
      MT754.U008B.Elements.Add((SwiftDefinitionElement) MT754.U008F);
      MT754.U0093 = new SwiftTagDefinition("AccountWithBank_57D", "Account With Bank");
      MT754.U0093.TagName = ":57D:";
      MT754.U0094 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT754.U0094.Mandatory = false;
      MT754.U0093.Elements.Add((SwiftDefinitionElement) MT754.U0094);
      MT754.U0095 = new SwiftTagSubItemDefinition("NameAndAddress", "Name And Address");
      MT754.U0093.Elements.Add((SwiftDefinitionElement) MT754.U0095);
      MT754.U008B.Elements.Add((SwiftDefinitionElement) MT754.U0093);
      MT754.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT754.U008B);
      MT754.U0096 = new SwiftTagChoiceDefinition("Choice", "");
      MT754.U0096.Mandatory = false;
      MT754.U0096.Multiple = true;
      MT754.U0097 = new SwiftTagDefinition("BeneficiaryBank_58A", "Beneficiary Bank");
      MT754.U0097.TagName = ":58A:";
      MT754.U0098 = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT754.U0098.Mandatory = false;
      MT754.U0097.Elements.Add((SwiftDefinitionElement) MT754.U0098);
      MT754.U0099 = new SwiftTagSubItemDefinition("BankIdentifierCode", "Bank Identifier Code");
      MT754.U0097.Elements.Add((SwiftDefinitionElement) MT754.U0099);
      MT754.U0096.Elements.Add((SwiftDefinitionElement) MT754.U0097);
      MT754.U009A = new SwiftTagDefinition("BeneficiaryBank_58D", "Beneficiary Bank");
      MT754.U009A.TagName = ":58D:";
      MT754.U009B = new SwiftTagSubItemDefinition("PartyIdentifier", "Party Identifier");
      MT754.U009B.Mandatory = false;
      MT754.U009A.Elements.Add((SwiftDefinitionElement) MT754.U009B);
      MT754.U009C = new SwiftTagSubItemDefinition("NameAndAddress", "Name And Address");
      MT754.U009A.Elements.Add((SwiftDefinitionElement) MT754.U009C);
      MT754.U0096.Elements.Add((SwiftDefinitionElement) MT754.U009A);
      MT754.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT754.U0096);
      MT754.U009D = new SwiftTagDefinition("SenderToReceiverInformation_72", "Sender To Receiver Information");
      MT754.U009D.TagName = ":72:";
      MT754.U009D.Mandatory = false;
      MT754.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT754.U009D);
      MT754.U009E = new SwiftTagDefinition("Narrative_77A", "Narrative");
      MT754.U009E.TagName = ":77A:";
      MT754.U009E.Mandatory = false;
      MT754.MessageDefinition.Elements.Add((SwiftDefinitionElement) MT754.U009E);
    }

    public class Tag53B : SwiftTagWrapper
    {
      public string Value
      {
        get
        {
          return this.GetValue();
        }
        set
        {
          this.SetValue("53B", value);
        }
      }

      internal Tag53B(SwiftElement parent, int index, SwiftDefinitionElement definition)
        : base(parent, index, definition)
      {
      }
    }

    public class Tag57B : SwiftTagWrapper
    {
      public string Value
      {
        get
        {
          return this.GetValue();
        }
        set
        {
          this.SetValue("57B", value);
        }
      }

      internal Tag57B(SwiftElement parent, int index, SwiftDefinitionElement definition)
        : base(parent, index, definition)
      {
      }
    }
  }
}
